/***************************************************************************************************
  Copyright(C)   2011-9-5
  All rights reserved.
  File Name: recepkgmanage.h

  Description:包管理类
              用来管理发送包的管理，首先给它设定一个包的总数，然后每发送过来一个包，就添加到
              里面，最后发送完成时，它可以确定究竟文件所有的数据包是否已经发完，如果没发完可以得到
              哪些包没有发送过来，和这个没发送包的开始位置
  note:如果发送过来的包号大于你原先设定的包总数，那么会出现错误，未接收的包将被清空
*************************************************************************/

#ifndef RecePkgManage_H
#define RecePkgManage_H

#include <QMap>
#include <QList>
#include <QDebug>

#include "environment.h"

typedef struct FILEPKGSTRUCT{
    int start;
    int end;
    qint64 startPos;
    qint64 endPos;
}FilePkgStruct;



class RecePkgManage
{
public:
    RecePkgManage(QObject *parent);

    bool addRecePkg(const int pkgNum, const qint64 position);

    bool initRecePkgManage(int count);
    bool initRecePkgManage(const int count, const QList<FilePkgStruct>& list);


    QList<FilePkgStruct> getunRecePkgList();

    int getUnRecePkgListCount() const;
    int getRecePkgCount() const;


private:
    QList<FilePkgStruct> unRecePkgList;
    QList<int> startList;

    int pkgCount;

    int hadReceCount;           //收到包的数量

    qint64 startPos;            //开始文件位置
    qint64 endPos;
    int recePkgStartNum;        //收到文件包开始包号
    int recePkgEndNum;          //收到文件包结束包号

private:
    void init();
    void sortUnRecePkgList(const FilePkgStruct& recePkgStruct);

};

#endif // RecePkgManage_H

